added some development tools
[windows-sources.git] / developer / Samples / NET 4.6 / Samples for Parallel / NQueens / NQueens_VisualBasic / MainForm.vb
blobbc124ebf4ccb3d14897fe637f9dd28c517df4911
1 '--------------------------------------------------------------------------
2 '
3 ' Copyright (c) Microsoft Corporation. All rights reserved.
4 '
5 ' File: MainForm.vb
7 '--------------------------------------------------------------------------
9 Imports System.Threading
10 Imports System.Threading.Tasks
11 Imports System.Windows.Forms.DataVisualization.Charting
13 Public Class MainForm
15 Private _uiScheduler As TaskScheduler
16 Private _serial As DataPoint
17 Private _parallel As DataPoint
18 Private _max As Double = 0
20 Private Sub MainForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
21 _uiScheduler = TaskScheduler.FromCurrentSynchronizationContext()
22 SetupPoints()
23 End Sub
25 Private Sub SetupPoints()
26 _serial = chart1.Series(0).Points(chart1.Series(0).Points.AddXY("Serial", 0.0))
27 _parallel = chart1.Series(0).Points(chart1.Series(0).Points.AddXY("Parallel", 0.0))
28 chart1.ChartAreas(0).AxisY.Minimum = 0.0
29 chart1.ChartAreas(0).AxisY.Maximum = 10.0
30 ClearPointValues()
31 Invalidate()
32 End Sub
34 Private Sub ClearPointValues()
35 For Each Point In New DataPoint() {_serial, _parallel}
36 With Point
37 .SetValueY(0)
38 .ToolTip = ""
39 .Label = ""
40 .Font = New System.Drawing.Font(Point.Font, System.Drawing.FontStyle.Bold)
41 End With
43 Next
44 chart1.Invalidate()
45 End Sub
48 Private Sub btnSolve_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSolve.Click
49 Dim numQueens = 0
50 If Int32.TryParse(cbNumQueens.Text, numQueens) = False Then Return
52 btnSolve.Enabled = False
53 progressBar1.Visible = True
55 ClearPointValues()
56 _max = 0
58 Task.Factory.StartNew(Sub()
59 Dim elapsed As TimeSpan
61 elapsed = Time(Sub()
62 NQueensSolver.Sequential(numQueens)
63 End Sub)
64 SetPoint(_serial, elapsed.TotalSeconds)
66 elapsed = Time(Sub()
67 NQueensSolver.Parallel(numQueens)
68 End Sub)
69 SetPoint(_parallel, elapsed.TotalSeconds)
70 End Sub
71 ).ContinueWith(Sub(t)
72 progressBar1.Visible = False
73 btnSolve.Enabled = True
74 If t.IsFaulted Then MessageBox.Show(t.Exception.ToString())
75 End Sub, _uiScheduler)
76 End Sub
79 Private Sub SetPoint(ByVal point As DataPoint, ByVal seconds As Double)
80 Task.Factory.StartNew(Sub()
81 If seconds > _max Then
82 _max = seconds
83 chart1.ChartAreas(0).AxisY.Maximum = _max * 1.1
84 End If
85 point.SetValueY(seconds)
86 point.ToolTip = seconds.ToString("F3")
87 point.Label = String.Format("{0:F3} secs ({1:F2}x)", seconds, (_max / seconds))
88 chart1.Invalidate()
89 End Sub, CancellationToken.None, TaskCreationOptions.None, _uiScheduler)
90 End Sub
92 Private Shared Function Time(ByVal action As Action) As TimeSpan
93 Dim sw = Stopwatch.StartNew()
94 action()
95 Return sw.Elapsed
96 End Function
97 End Class